package org.yzhzc.common.rabbit.config;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.yzhzc.common.core.constants.RabbitMQConstants;


/**
 * RabbitMQ 配置类。
 * 用于配置 RabbitMQ 的队列和消息转换器。
 *
 * 主要功能：
 * 1. 定义一个工作队列，用于处理判题任务。
 * 2. 配置消息转换器，将消息转换为 JSON 格式。
 *
 * 使用场景：
 * - 当用户提交代码后，将判题任务发送到工作队列。
 * - 消费者从队列中获取任务并进行判题。
 */
@Configuration
public class RabbitConfig {

    /**
     * 创建工作队列。
     *
     * @return 返回一个持久化的队列实例
     */
    @Bean // 将方法返回值注册为 Spring Bean
    public Queue workQueue() {
        // 创建一个持久化的队列，队列名称为 OJ_WORK_QUEUE
        return new Queue(RabbitMQConstants.OJ_WORK_QUEUE, true);
    }

    /**
     * 配置消息转换器。
     * 将消息转换为 JSON 格式，便于序列化和反序列化。
     *
     * @return 返回 Jackson2JsonMessageConverter 实例
     */
    @Bean
    public MessageConverter messageConverter() {
        // 使用 Jackson2JsonMessageConverter 将消息转换为 JSON 格式
        return new Jackson2JsonMessageConverter();
    }
}